/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOVentaLineaCredito;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioVentaLineaCredito;
import pe.com.cotelasa.scp.entidad.VentaLineaCredito;

/**
 *
 * @author Jorge
 */
@Service
public class ServicioVentaLineaCreditoImpl implements IServicioVentaLineaCredito, Serializable {

    @Inject
    private IDAOVentaLineaCredito daoVentaLineaCredito;

    @Override
    public ResultadoServicio guardarLineaCredito(VentaLineaCredito ventaLineaCredito) {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            if(daoVentaLineaCredito.getVentaLineaCredito(ventaLineaCredito.getRuc()) == null){
                resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.EXITOSO);
                resultadoServicio.setID(daoVentaLineaCredito.insert(ventaLineaCredito));
                resultadoServicio.setMensaje("Se guardo el documento satisfactoriamente.");
                               
            } else{
                 resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.OBSERVADO);
                resultadoServicio
                    .setMensaje("Ya existe una linea de credito asignada a este cliente");
                
                
            }   
           
        } catch (Exception ex) {
            
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio
                    .setMensaje("Ocurrio un problema al tratar de guardar el documento. Vuelva a intentar");
            Logger.getLogger(ServicioVentaFacturacionImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarLineaCredito(VentaLineaCredito ventaLineaCredito) {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {

            daoVentaLineaCredito.actualizar(ventaLineaCredito);
            resultadoServicio.setMensaje("Se guardo el documento satisfactoriamente.");
        } catch (Exception ex) {
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio
                    .setMensaje("Ocurrio un problema al tratar de guardar el documento. Vuelva a intentar");
            Logger.getLogger(ServicioVentaFacturacionImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public List<VentaLineaCredito> obtenerVentaLineaCreditoCliente(String razon) throws ServiceException {
        
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("rasonSocial", razon);
            //parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return (List<VentaLineaCredito>)daoVentaLineaCredito.obtenerColeccionEntidadPorFiltros(VentaLineaCredito.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        
    }

    @Override
    public List<VentaLineaCredito> listarTodos() throws ServiceException {
        try {
            return new ArrayList<VentaLineaCredito>(daoVentaLineaCredito.listarTodos(VentaLineaCredito.class));
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public VentaLineaCredito getVentaLineaCredito(String ruc) throws ServiceException {
        try {
            return daoVentaLineaCredito.getVentaLineaCredito(ruc);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
